#ifndef EGEUI_BINTREE_H
#define EGEUI_BINTREE_H
#include <graphics.h>
#include <cmath>
#include <cstdio>
#include<iostream>
#include<stack>
#include <queue>
#include<sstream>
#include<vector>
using namespace std;

typedef struct BinSortT_Node{
    int data;
    struct BinSortT_Node *lchild, *rchild;
}BinSortT_Node, *BinSortT_P;

typedef struct node_point {
    float lx,ux;
    float  ly,uy;
}node_point;

void CreateBST(BinSortT_P *T, vector<int> a); //创建二叉排序树
void Insert_BST(BinSortT_P *root, int data); // 插入节点
BinSortT_P Search_BST(BinSortT_P *root, int key); //查找节点
void DeleteBSTNode(BinSortT_P *root, int data); //删除节点


// 非递归
void nPreOrderTraverse(BinSortT_Node *); //前序遍历
void nInOrderTraverse(BinSortT_Node *);   //中序遍历
void nPostOrderTraverse(BinSortT_Node *);  //后序遍历

int Tree_depth(BinSortT_P T); //高度
string makespace(int num); //生成空格
int getNum(int x); // 获取数字的位数
void coutNode(int data,int width); //输出数字
void levelOrder(BinSortT_Node *root); //层次遍历打印二叉树

void plot_node(int x,int y,int r,int data,int n); // 绘制节点
void plot_tree(BinSortT_Node *root); // 绘制二叉树
void plot_tree2(BinSortT_Node *root); // 绘制二叉树
#endif //EGEUI_BINTREE_H
